package classloader;
/*
关于命名空间的重要说明
每个加载器都有自己的命名空间
1.子加载器所加载的类是能够访问到父加载器所加载的类
2.父加载器所加载的类无法访问子加载器所加载的类

 */
public class MyTest17_2 {

    public static void main(String[] args) throws Exception {
        MyTest16_2 loader1 = new MyTest16_2("loader1");
        loader1.setPath("D:\\code\\class\\");
        Class<?> clazz = loader1.loadClass("classloader.MySample2");
        System.out.println("class : " + clazz.hashCode());

        Object o = clazz.newInstance();
        //修改MyCat2后，仍然删除classpath下的MySample2，留下MyCat2，程序报错

        //每个加载器都有自己的命名空间
        //因为命名空间，父加载器所加载的类找不到子加载器所加载的类，因此MyCat2找不到

        //然而 子加载器所加载的类是能够访问到父加载器所加载的类
    }
}

class MyCat2 {
    public MyCat2() {
        System.out.println("MyCat2 by load " + MyCat.class.getClassLoader());
        System.out.println("from MyCat2: " + MySample2.class);
    }
}

class MySample2 {
    public MySample2() {
        System.out.println("MySimple2 by Load " + MySample2.class.getClassLoader());
        new MyCat2();
        System.out.println("from MySample2: " + MyCat2.class);
    }
}
